package qc.module.platform.api.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import qc.common.core.exception.QCPromptException;
import qc.module.platform.dto.dbTableColumn.DBTableColumnDto;
import qc.module.platform.dto.dbTableColumn.DBTableColumnOptionsDto;
import qc.module.platform.service.DbTableColumnService;

import java.sql.SQLException;
import java.util.List;

/**
 * DbTableColumnController
 *
 * @author QuCheng Tech
 * @since 2024/1/29
 */
@RestController
@RequestMapping("/dbtablecolumn")
public class DbTableColumnController {
    private DbTableColumnService service;

    @Autowired
    public void setDbTableColumnService(DbTableColumnService service) {
        this.service = service;
    }

    /***
     * 获取指定数据库表的所有列
     *
     * @param id 表编码
     * @return java.util.List<qc.module.platform.dto.dbTableColumn.DBTableColumnDto>
     * @author QuCheng Tech
     * @since 2024/1/29
     */
    @GetMapping("/table")
    public List<DBTableColumnDto> getTableAllByParam(@RequestParam(name = "id", required = true) String id) throws QCPromptException {
        return service.getTableColumns(id, false,"code");
    }

    /***
     * 获取指定数据库表的所有列
     *
     * @param id 表编码
     * @return java.util.List<qc.module.platform.dto.dbTableColumn.DBTableColumnDto>
     * @author QuCheng Tech
     * @since 2024/1/29
     */
    @GetMapping("/table/{id}")
    public List<DBTableColumnDto> getTableAllByPath(@PathVariable(name = "id", required = true) String id) throws QCPromptException {
        return service.getTableColumns(id, false,"code");
    }

    /***
     * 获取指定数据库表的所有前端显示列
     *
     * @param id 表编码
     * @return java.util.List<qc.module.platform.dto.dbTableColumn.DBTableColumnDto>
     * @author QuCheng Tech
     * @since 2024/1/29
     */
    @GetMapping("/tableshow")
    public List<DBTableColumnDto> getTableAllShowByParam(@RequestParam(name = "id", required = true) String id) throws QCPromptException {
        return service.getTableColumns(id, true,"code");
    }

    /***
     * 获取指定数据库表的所有前端显示列
     *
     * @param id 表编码
     * @return java.util.List<qc.module.platform.dto.dbTableColumn.DBTableColumnDto>
     * @author QuCheng Tech
     * @since 2024/1/29
     */
    @GetMapping("/tableshow/{id}")
    public List<DBTableColumnDto> getTableAllShowByPath(@PathVariable(name = "id", required = true) String id) throws QCPromptException {
        return service.getTableColumns(id, true,"code");
    }

    /**
     * 获取指定
     * @param tbcode 数据库表编码
     * @param code 列编码
     * @return 数据库表列信息
     * @author QuCheng Tech
     * @since 2024/3/13
     */
    @GetMapping("/get")
    public DBTableColumnDto get(@RequestParam String tbcode,@RequestParam String code) throws QCPromptException {
        return service.get(tbcode,code);
    }

    /**
     * 新增
     * @param dto
     * @return 成功返回null，失败返回错误信息
     * @author QuCheng Tech
     * @since 2024/3/13
     */
    @RequestMapping(value = "/add",method = {RequestMethod.GET,RequestMethod.POST})
    public String add(@RequestBody DBTableColumnDto dto){
        return service.add(dto);
    }

    /**
     * 修改
     * @param dto
     * @return 成功返回null，失败返回错误信息
     * @author QuCheng Tech
     * @since 2024/3/13
     */
    @RequestMapping(value = "/update",method = {RequestMethod.POST,RequestMethod.PUT})
    public String update(@RequestBody DBTableColumnDto dto){
        return service.update(dto);
    }

    /**
     * 删除
     * @param tbcode 数据库表编码
     * @param code 列编码
     * @return 成功返回null，失败返回错误信息
     * @author QuCheng Tech
     * @since 2024/3/13
     */
    @DeleteMapping("/delete")
    public String delete(@RequestParam String tbcode,@RequestParam String code) throws QCPromptException {
        return service.delete(tbcode,code);
    }

    /**
     * 返回数据库表列的数据选择项集合——已废弃
     * @return DBTableColumnOptionsDto
     * @author QuCheng Tech
     * @since 2024/3/26
     */
    @GetMapping("/getoptions")
    public DBTableColumnOptionsDto getOptions(){
        return service.getOptions();
    }

    /**
     * 获取指定表的列结构信息，处理转换后新增到数据表列中
     *
     * @param id 数据库表编码
     * @return 返回提示信息：共有几列，已有几列，新增几列
     * @author Qucheng Tech
     * @since 2024/04/19
     */
    @GetMapping("getaddcolumnsinfo")
    public String GetAddDbTableColumnsInfoByParam(@RequestParam String id) throws QCPromptException, SQLException {
        return service.GetAddDbTableColumnsInfo(id);
    }

    /**
     * 获取指定表的列结构信息，处理转换后新增到数据表列中
     *
     * @param id 数据库表编码
     * @return 返回提示信息：共有几列，已有几列，新增几列
     * @author Qucheng Tech
     * @since 2024/04/19
     */
    @GetMapping("getaddcolumnsinfo/{id}")
    public String GetAddDbTableColumnsInfoByPath(@PathVariable String id) throws QCPromptException, SQLException {
        return service.GetAddDbTableColumnsInfo(id);
    }
}
